package 力扣_算法题综合.高频面试算法;

/**
 * @author zx
 * @create 2022-08-24 17:45
 */
public class 合并两个有序数组_88 {
    /**
     * 面试最优写法
     */
    public void merge(int[] nums1, int m, int[] nums2, int n) {
        int i = m - 1, j = n - 1;
        int k = m + n - 1;
        int temp = 0;
        while(i >= 0 || j >= 0){
            if(i < 0){
                temp = nums2[j];
                j--;
            }else if(j < 0){
                temp = nums1[i];
                i--;
            }else if(nums1[i] <= nums2[j]){
                temp = nums2[j];
                j--;
            }else if(nums1[i] > nums2[j]){
                temp = nums1[i];
                i--;
            }
            nums1[k] = temp;
            k--;
        }
    }

    public void merge2(int[] nums1, int m, int[] nums2, int n) {
        int[] temp = new int[m];
        for(int i = 0;i < m;i++){
            temp[i] = nums1[i];
        }
        int i = 0, j = 0, count = 0;
        while(i != m && j != n){
            if(temp[i] < nums2[j]){
                nums1[count] = temp[i];
                i++;
            }else{
                nums1[count] = nums2[j];
                j++;
            }
            count++;
        }
        if(i == m){
            for(int k = j;k < nums2.length;k++){
                nums1[count] = nums2[k];
                count++;
            }
        }else{
            for(int k = i;k < temp.length;k++){
                nums1[count] = temp[k];
                count++;
            }
        }
    }
}
